// new 手写
function Person(name, age) {
  // {}
  // 函数的运行过程就是构造对象的过程
  this.name = name;
  this.age = age;
  // return {}
}
// Person.prototype.say = function() {
//   console.log(this.age);
// }

// // let p2 = new Person('黄亮', 17)
// let p2 = {};
// console.log(p2.__proto__);
// // p2.__proto__ Object
// p2 = new Person('赖总', 18);
// console.log(Object.hasOwnProperty('say'), Object.hasOwnPropery('say'))
// p2 ? 做了什么事情? 
// JS 是原型式的面向对象
// p2的原型对象, 由默认Object 中间插入Person.prototype
// p2.__proto__ Object -> Person.prototype


// 手写new   myNew 
// 之前是用 new Person
// reset 运算符
function myNew(fn, ...args){
  // console.log(fn, args);
  // Object.create
  let obj = Object.create(fn.prototype);
  console.log(obj, obj.__proto__);
  // obj上代替 this 的属性
  // 构造的过程  函数运行一下， 并且 this 指向 obj？
  console.log(args, '----')
  Person.call(obj, ...args)
  console.log(obj, '///')
  // 原型的设置
  // 返回 对象
  return obj;
}
let p3 = myNew(Person, '俊严', 18);
console.log(p3)
